home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / WFC010.ZIP / SRC / CNETRSRC.CPP < prev    next >
C/C++ Source or Header  |  1995-12-07  |  6KB  |  301 lines

  1. #include <wfc.h>
  2. #pragma hdrstop
  3.  
  4. /*
  5. ** Author: Samuel R. Blackburn
  6. ** CI$: 76300,326
  7. ** Internet: sammy@sed.csc.com
  8. **
  9. ** You can use it any way you like as long as you don't try to sell it.
  10. **
  11. ** Any attempt to sell WFC in source code form must have the permission
  12. ** of the original author. You can produce commercial executables with
  13. ** WFC but you can't sell WFC.
  14. **
  15. ** Copyright, 1995, Samuel R. Blackburn
  16. **
  17. ** $Workfile: $
  18. ** $Revision: $
  19. ** $Modtime: $
  20. */
  21.  
  22. #if defined( _DEBUG )
  23. #undef THIS_FILE
  24. static char BASED_CODE THIS_FILE[] = __FILE__;
  25. #endif
  26.  
  27. IMPLEMENT_SERIAL( CNetworkResourceInformation, CObject, 1 )
  28. IMPLEMENT_DYNAMIC( CNetworkResources, CNetwork )
  29.  
  30. #if defined( _DEBUG )
  31. #define new DEBUG_NEW
  32. #endif
  33.  
  34. /*
  35. ** CNetResourceInformation stuff
  36. */
  37.  
  38. CNetworkResourceInformation::CNetworkResourceInformation()
  39. {
  40.    m_Initialize();
  41. }
  42.  
  43. CNetworkResourceInformation::CNetworkResourceInformation( const NETRESOURCE *source )
  44. {
  45.    Copy( source );
  46. }
  47.  
  48. CNetworkResourceInformation::CNetworkResourceInformation( const CNetworkResourceInformation& source )
  49. {
  50.    Copy( source );
  51. }
  52.  
  53. CNetworkResourceInformation::~CNetworkResourceInformation()
  54. {
  55.    m_Initialize();
  56. }
  57.  
  58. void CNetworkResourceInformation::Copy( const NETRESOURCE *source )
  59. {
  60.    ASSERT( source != NULL );
  61.  
  62.    if ( source == NULL )
  63.    {
  64.       m_Initialize();
  65.       return;
  66.    }
  67.  
  68.    if ( source->lpLocalName != (LPTSTR) NULL )
  69.    {
  70.       LocalName = source->lpLocalName;
  71.    }
  72.    else
  73.    {
  74.       LocalName.Empty();
  75.    }
  76.  
  77.    if ( source->lpRemoteName != (LPTSTR) NULL )
  78.    {
  79.       RemoteName = source->lpRemoteName;
  80.    }
  81.    else
  82.    {
  83.       RemoteName.Empty();
  84.    }
  85.  
  86.    if ( source->lpComment != (LPTSTR) NULL )
  87.    {
  88.       Comment = source->lpComment;
  89.    }
  90.    else
  91.    {
  92.       Comment.Empty();
  93.    }
  94.  
  95.    if ( source->lpProvider != (LPTSTR) NULL )
  96.    {
  97.       Provider = source->lpProvider;
  98.    }                               
  99.    else
  100.    {
  101.       Provider.Empty();
  102.    }
  103.  
  104.    Scope       = source->dwScope;
  105.    Type        = source->dwType;
  106.    DisplayType = source->dwDisplayType;
  107.    Usage       = source->dwUsage;
  108. }
  109.  
  110. void CNetworkResourceInformation::Copy( const CNetworkResourceInformation& source )
  111. {
  112.    ASSERT( this != &source );
  113.  
  114.    /*
  115.    ** Make sure we ain't copying ourselves
  116.    */
  117.  
  118.    if ( this == &source )
  119.    {
  120.       return;
  121.    }
  122.  
  123.    LocalName   = source.LocalName;
  124.    RemoteName  = source.RemoteName;
  125.    Comment     = source.Comment;
  126.    Provider    = source.Provider;
  127.    Scope       = source.Scope;
  128.    Type        = source.Type;
  129.    DisplayType = source.DisplayType;
  130.    Usage       = source.Usage;
  131. }
  132.  
  133. void CNetworkResourceInformation::Empty( void )
  134. {
  135.    m_Initialize();
  136. }
  137.  
  138. void CNetworkResourceInformation::m_Initialize( void )
  139. {
  140.    LocalName.Empty();
  141.    RemoteName.Empty();
  142.    Comment.Empty();
  143.    Provider.Empty();
  144.    Scope       = 0;
  145.    Type        = 0;
  146.    DisplayType = 0;
  147.    Usage       = 0;
  148. }
  149.  
  150. void CNetworkResourceInformation::Serialize( CArchive& archive )
  151. {
  152.    CObject::Serialize( archive );
  153.  
  154.    if ( archive.IsStoring() )
  155.    {
  156.       archive << LocalName;
  157.       archive << RemoteName;
  158.       archive << Comment;
  159.       archive << Provider;
  160.       archive << Scope;
  161.       archive << Type;
  162.       archive << DisplayType;
  163.       archive << Usage;
  164.    }
  165.    else
  166.    {
  167.       archive >> LocalName;
  168.       archive >> RemoteName;
  169.       archive >> Comment;
  170.       archive >> Provider;
  171.       archive >> Scope;
  172.       archive >> Type;
  173.       archive >> DisplayType;
  174.       archive >> Usage;
  175.    }
  176. }
  177.  
  178. /*
  179. ** CNetworkResources Stuff
  180. */
  181.  
  182. CNetworkResources::CNetworkResources()
  183. {
  184.    m_Initialize();
  185. }
  186.  
  187. CNetworkResources::~CNetworkResources()
  188. {
  189.    if ( m_ResumeHandle != NULL )
  190.    {
  191.       ::WNetCloseEnum( m_ResumeHandle );
  192.       m_ResumeHandle = NULL;
  193.    }
  194.  
  195.    m_Initialize();
  196. }
  197.  
  198. void CNetworkResources::m_Initialize( void )
  199. {
  200.    m_ErrorCode    = 0;
  201.    m_ResumeHandle = (HANDLE) NULL;
  202.    ::ZeroMemory( &m_NetResource, sizeof( m_NetResource ) );
  203. }
  204.  
  205. BOOL CNetworkResources::Enumerate( CNetworkResourceInformation& information )
  206. {
  207.    if ( m_ResumeHandle != NULL )
  208.    {
  209.       ::WNetCloseEnum( m_ResumeHandle );
  210.       m_ResumeHandle = NULL;
  211.    }
  212.  
  213.    ::ZeroMemory( &m_NetResource, sizeof( m_NetResource ) );
  214.    m_NetResource.dwUsage = usageContainer;
  215.  
  216.    NETRESOURCE *net_resource_parameter = (NETRESOURCE *) NULL;
  217.  
  218.    /*
  219.    ** Let's see what we want to enumerate
  220.    */
  221.  
  222.    switch( information.Scope )
  223.    {
  224.       case scopeConnected: // information.Usage is ignored
  225.  
  226.          break;
  227.             
  228.       case scopePersistent:  // information.Usage is ignored
  229.  
  230.          break;
  231.  
  232.       case scopeAll:
  233.  
  234.          break;
  235.  
  236.       default:
  237.  
  238.          m_ErrorCode = ERROR_INVALID_PARAMETER;
  239.          return( FALSE );
  240.    }
  241.  
  242.    switch( information.Usage )
  243.    {
  244.       case usageAll:
  245.  
  246.          net_resource_parameter = (NETRESOURCE *) NULL;
  247.          break;
  248.  
  249.       case usageConnectable:
  250.       case usageContainer:
  251.  
  252.          net_resource_parameter = &m_NetResource;
  253.          break;
  254.  
  255.       default:
  256.  
  257.          m_ErrorCode = ERROR_INVALID_PARAMETER;
  258.          return( FALSE );
  259.    }
  260.  
  261.    m_ErrorCode = ::WNetOpenEnum( information.Scope, 
  262.                                  information.Type, 
  263.                                  information.Usage, 
  264.                                  net_resource_parameter,
  265.                                 &m_ResumeHandle );
  266.  
  267.    if ( m_ErrorCode == NO_ERROR )
  268.    {
  269.       return( TRUE );
  270.    }
  271.    else if ( m_ErrorCode == ERROR_EXTENDED_ERROR )
  272.    {
  273.       m_ErrorCode = ::GetLastError();
  274.    }
  275.  
  276.    return( FALSE );
  277. }
  278.  
  279. BOOL CNetworkResources::GetNext( CNetworkResourceInformation& information )
  280. {
  281.    DWORD number_of_entries = 1;
  282.    DWORD size_of_buffer    = sizeof( m_NetResource );
  283.  
  284.    m_ErrorCode = ::WNetEnumResource( m_ResumeHandle,
  285.                                     &number_of_entries,
  286.                                     &m_NetResource,
  287.                                     &size_of_buffer );
  288.  
  289.    if ( m_ErrorCode == NO_ERROR )
  290.    {
  291.       information.Copy( &m_NetResource );
  292.       return( TRUE );
  293.    }
  294.    else if ( m_ErrorCode == ERROR_EXTENDED_ERROR )
  295.    {
  296.       m_ErrorCode = ::GetLastError();
  297.    }
  298.                                         
  299.    return( FALSE );
  300. }
  301.